import parseAttrsString from './parseAttrsString'
export default function (templateString) {
  // 指针
  let index = 0
  let rest = ''
  // 开始标记
  var startRegExp = /^\<([a-z]+[1-6]?)(\s[^\<]+)?\>/
  // 准备两个栈
  let stack1 = []
  let stack2 = [{ children: [] }]
  // 抓取结束标签之前的文字
  let wordRegExp = /^([^\<]+)\<\/[a-z]+[1-6]?\>/

  while (index < templateString.length - 1) {
    // 剩余部分
    rest = templateString.substring(index)
    // 识别遍历到的字符是不是开始标签
    if (startRegExp.test(rest)) {
      // console.log(111)
      // 开始标签
      let tag = rest.match(startRegExp)[1]
      let attrsString = rest.match(startRegExp)[2]
      // console.log('检测到开始', tag)
      // 将开始标记推入栈1中
      stack1.push(tag)
      // console.log(tag)
      // 将空数组推入栈2
      stack2.push({ tag: tag, children: [], attrs: parseAttrsString(attrsString) })
      // 得到attrs字符串的长度
      const attrsStringLength = attrsString != null ? attrsString.length : 0

      // <>占2位,attrsString也要跳过
      index += tag.length + 2 + attrsStringLength
    } else if (/^\<\/([a-z]+[1-6]?)\>/.test(rest)) {
      // 结束标签
      let tag = rest.match(/^\<\/([a-z]+[1-6]?)\>/)[1]
      // console.log('检测到结束', tag)
      let pop_tag = stack1.pop()
      // 弾栈
      // console.log(tag)
      // console.log(pop_tag)
      if (tag == pop_tag) {
        let pop_arr = stack2.pop()
        if (stack2.length > 0) {
          stack2[stack2.length - 1].children.push(pop_arr)
        }
      } else {
        throw Error(pop_tag + '标签未封闭')
      }
      // </>占3位
      index += tag.length + 3
    } else if (wordRegExp.test(rest)) {
      // console.log(222)
      // 识别遍历的字符是不是文字
      let word = rest.match(wordRegExp)[1]
      // 检测word是不是换行的空格
      if (!/^\s+$/.test(word)) {
        // console.log('检测到文字', word)
        //改变此时stack2栈顶元素的内容
        stack2[stack2.length - 1].children.push({ text: word, type: 3 })
      }
      index += word.length
      // console.log(stack2)
    } else {
      index++
    }
  }
  // console.log(stack2)
  return stack2[0].children[0]
}
